/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grest.model;

import java.util.List;
import java.sql.*;



/**
 *
 * @author rodrigo
 */
public class Clientes implements Entidad{
    private int nro_cli;
    private String nombre;
    private String apellido;
    private boolean changed;
    private boolean prechanged=false;
    
    
      //Constructores
    public Clientes(){
        this(0,"nulo","nulo");
    }
    
    
     /**
     * Constructor de la clase Mesas que obtiene como parametro un Resultset
     * @param rs
     * @throws SQLException 
     */
    public Clientes(ResultSet rs) throws SQLException {
        // valores para un nuevo objeto Test
        setNroCli(rs.getInt("NRO_CLIENTE"));
        setNombre(rs.getString("NOMBRE"));
        setApellido(rs.getString("APELLIDO"));
        setChanged(false);
    }
    
    
    
   
    
        /**
     * Constructor para objetos de tipo Clientes
     * @param nro_cli
     * @param nombre
     * @param apellido
     */
    public Clientes(int nro_cli,String nombre,String apellido){
        this.nro_cli = nro_cli;
        this.nombre = nombre;
        this.apellido = apellido;
    }
    
    /**
     * Metodo que obtiene el nro_CLIENTE 
     * @return int
     */
    public int getNroCli(){
        return nro_cli;
    }
    
    /**
     * Metodo que obtiene el nombre del cliente 
     * @return  String
     */    
    public String getNombre(){
        return nombre;
    }
    
    /**
     * Metodo que obtiene el apellido del cliente 
     * @return  String
     */    
    public String getApellido(){
        return apellido;
    }
    
    
    /**
     * Establece el numero de mesa
     * @param nro 
     */
    public void setNroCli(int nro){
        this.nro_cli = nro;
        setChanged(true);
    }
    
    /**
     * Establece el nombre del cliente
     * @param s 
     */   
    public void setNombre(String s){
        this.nombre = s;
        setChanged(true);
    }
    
    /**
     * Establece el apellido del cliente
     * @param s 
     */   
    public void setApellido(String s){
        this.apellido = s;
        setChanged(true);
    }
    
    
    //Implementacion Interfase Entidad
        
    @Override
    public boolean isChanged() {
        return changed;
    }
    
    
    @Override
    public boolean isColumnEditable(int columna){
        switch(columna){
            case 0 : return false;
            case 1 : return true;
            case 2 : return true;
        }
        return false;
    }
    
    @Override
    public void setChanged(boolean f){
        if(!prechanged) changed = f;
    }
    
    
    @Override
    public int getColumnCount(){
        return 3;
    }
    
    
    @Override
    public Class getColumnClass(int c){
        switch(c){
            case 0 : return Integer.class;
            case 1 : return String.class;
            case 2 : return String.class;
        }
    return null;
    }
    
    @Override
    public String getColumnTitle(int columna){
        switch(columna){
            case 0 : return "nro_cliente";
            case 1 : return "nombre";
            case 2 : return "apellido";
        }
    return null;
    }
    
    
    @Override
    public Object getColumnValue(List<Entidad> e,int row,int col) {
        switch(col) {
            case 0:
                return ((Clientes) e.get(row)).getNroCli();
            case 1:
                return ((Clientes) e.get(row)).getNombre();
            case 2:
                 return ((Clientes) e.get(row)).getApellido();
        }
        return null;
    }
    
    
    @Override
     public void setColumnValue(List<Entidad> e,int row,int col,Object value) {
        switch(col) {
           case 0:
                ((Clientes) e.get(row)).setNroCli((Integer) value);
                break;
           case 1:
                ((Clientes) e.get(row)).setNombre((String) value);
                break;
           case 2:
                ((Clientes) e.get(row)).setApellido((String) value);
                break;
        }
     }
    
    @Override
     public void loadTuplas(List<Entidad> tipoEntidad, ResultSet tuplas) throws SQLException{
         tipoEntidad.add(new Clientes(tuplas));
     }   
    
    @Override
    public String getSelectQuery(){
        return "select * from t_clientes";
    }
     
    @Override
     public String getInsertQuery(){
        return "insert into t_clientes values(" + getNroCli() + ",'" + getNombre() + "','" + getApellido()+"')";
     }
     
    @Override
     public String getUpdateQuery(){
        return "update t_clientes set nombre = '" + getNombre() + "', apellido = '" + getApellido() + "' where nro_cliente = " + getNroCli();
     }
     
    @Override
     public String getDeleteQuery() {
        return "delete from t_clientes where nro_cliente = " + getNroCli();
    }

    @Override
    public void setPreChanged(boolean p){
        prechanged=p;
    }
    @Override
    public boolean isPreChanged()
    {
        return prechanged;
    }

    @Override
    public String onPreInsertQuery() {
        return "SELECT GEN_ID( GN_T_CLIENTES, 1 ) FROM RDB$DATABASE";

    }

    @Override
    public void setID(Object id) {
        this.nro_cli=(Integer) id;
    }
}